<?php
// +----------------------------------------------------------------------
// | 名片应用
// | Author: 张亚 < zhyacn@gmail.com>
// +----------------------------------------------------------------------
namespace app\businesscard\controller;

use app\admin\model\RouteModel;
use app\admin\model\ThemeModel;
use app\businesscard\model\BusinessCategoryModel;
use cmf\controller\AdminBaseController;
use think\Db;

class AdminCategoryController extends AdminBaseController {
	/**
	 * 行业分类列表
	 * @adminMenu(
	 *     'name'   => '行业管理',
	 *     'parent' => 'businesscard/AdminIndex/default',
	 *     'display'=> true,
	 *     'hasView'=> true,
	 *     'order'  => 10000,
	 *     'icon'   => '',
	 *     'remark' => '行业分类列表',
	 *     'param'  => ''
	 * )
	 */
	public function index() {
		$businessCategoryModel = new BusinessCategoryModel();
		$categoryTree = $businessCategoryModel->adminCategoryTableTree();

		$this->assign('category_tree', $categoryTree);
		return $this->fetch();
	}

	/**
	 * 添加行业分类
	 * @adminMenu(
	 *     'name'   => '添加行业分类',
	 *     'parent' => 'index',
	 *     'display'=> false,
	 *     'hasView'=> true,
	 *     'order'  => 10000,
	 *     'icon'   => '',
	 *     'remark' => '添加行业分类',
	 *     'param'  => ''
	 * )
	 */
	public function add() {
		$parentId = $this->request->param('parent', 0, 'intval');
		$businessCategoryModel = new BusinessCategoryModel();
		$categoriesTree = $businessCategoryModel->adminCategoryTree($parentId);

		$themeModel = new ThemeModel();
		$listThemeFiles = $themeModel->getActionThemeFiles('businesscard/List/index');
		$articleThemeFiles = $themeModel->getActionThemeFiles('businesscard/Card/index');

		$this->assign('list_theme_files', $listThemeFiles);
		$this->assign('article_theme_files', $articleThemeFiles);
		$this->assign('categories_tree', $categoriesTree);
		return $this->fetch();
	}

	/**
	 * 添加行业分类提交
	 * @adminMenu(
	 *     'name'   => '添加行业分类提交',
	 *     'parent' => 'index',
	 *     'display'=> false,
	 *     'hasView'=> false,
	 *     'order'  => 10000,
	 *     'icon'   => '',
	 *     'remark' => '添加行业分类提交',
	 *     'param'  => ''
	 * )
	 */
	public function addPost() {
		$businessCategoryModel = new BusinessCategoryModel();

		$data = $this->request->param();

		$result = $this->validate($data, 'BusinessCategory');

		if ($result !== true) {
			$this->error($result);
		}

		$result = $businessCategoryModel->addCategory($data);

		if ($result === false) {
			$this->error('添加失败!');
		}

		$this->success('添加成功!', url('AdminCategory/index'));

	}

	/**
	 * 编辑行业分类
	 * @adminMenu(
	 *     'name'   => '编辑行业分类',
	 *     'parent' => 'index',
	 *     'display'=> false,
	 *     'hasView'=> true,
	 *     'order'  => 10000,
	 *     'icon'   => '',
	 *     'remark' => '编辑行业分类',
	 *     'param'  => ''
	 * )
	 */
	public function edit() {
		$id = $this->request->param('id', 0, 'intval');
		if ($id > 0) {
			$category = BusinessCategoryModel::get($id)->toArray();

			$businessCategoryModel = new BusinessCategoryModel();
			$categoriesTree = $businessCategoryModel->adminCategoryTree($category['parent_id'], $id);

			$themeModel = new ThemeModel();
			$listThemeFiles = $themeModel->getActionThemeFiles('businesscard/List/index');
			$articleThemeFiles = $themeModel->getActionThemeFiles('businesscard/Card/index');

			$routeModel = new RouteModel();
			$alias = $routeModel->getUrl('businesscard/List/index', ['id' => $id]);

			$category['alias'] = $alias;
			$this->assign($category);
			$this->assign('list_theme_files', $listThemeFiles);
			$this->assign('article_theme_files', $articleThemeFiles);
			$this->assign('categories_tree', $categoriesTree);
			return $this->fetch();
		} else {
			$this->error('操作错误!');
		}

	}

	/**
	 * 编辑行业分类提交
	 * @adminMenu(
	 *     'name'   => '编辑行业分类提交',
	 *     'parent' => 'index',
	 *     'display'=> false,
	 *     'hasView'=> false,
	 *     'order'  => 10000,
	 *     'icon'   => '',
	 *     'remark' => '编辑行业分类提交',
	 *     'param'  => ''
	 * )
	 */
	public function editPost() {
		$data = $this->request->param();

		$result = $this->validate($data, 'BusinessCategory');

		if ($result !== true) {
			$this->error($result);
		}

		$businessCategoryModel = new BusinessCategoryModel();

		$result = $businessCategoryModel->editCategory($data);

		if ($result === false) {
			$this->error('保存失败!');
		}

		$this->success('保存成功!');
	}

	/**
	 * 行业分类选择对话框
	 * @adminMenu(
	 *     'name'   => '行业分类选择对话框',
	 *     'parent' => 'index',
	 *     'display'=> false,
	 *     'hasView'=> true,
	 *     'order'  => 10000,
	 *     'icon'   => '',
	 *     'remark' => '行业分类选择对话框',
	 *     'param'  => ''
	 * )
	 */
	public function select() {
		$ids = $this->request->param('ids');
		$selectedIds = explode(',', $ids);
		$businessCategoryModel = new BusinessCategoryModel();

		$tpl = <<<tpl
<tr class='data-item-tr'>
    <td>
        <input type='checkbox' class='js-check' data-yid='js-check-y' data-xid='js-check-x' name='ids[]'
               value='\$id' data-name='\$name' \$checked>
    </td>
    <td>\$id</td>
    <td>\$spacer <a href='\$url' target='_blank'>\$name</a></td>
</tr>
tpl;

		$categoryTree = $businessCategoryModel->adminCategoryTableTree($selectedIds, $tpl);

		$where = ['delete_time' => 0];
		$categories = $businessCategoryModel->where($where)->select();

		$this->assign('categories', $categories);
		$this->assign('selectedIds', $selectedIds);
		$this->assign('categories_tree', $categoryTree);
		return $this->fetch();
	}

	/**
	 * 行业分类排序
	 * @adminMenu(
	 *     'name'   => '行业分类排序',
	 *     'parent' => 'index',
	 *     'display'=> false,
	 *     'hasView'=> false,
	 *     'order'  => 10000,
	 *     'icon'   => '',
	 *     'remark' => '行业分类排序',
	 *     'param'  => ''
	 * )
	 */
	public function listOrder() {
		parent::listOrders(Db::name('business_category'));
		$this->success("排序更新成功！", '');
	}

	/**
	 * 删除行业分类
	 * @adminMenu(
	 *     'name'   => '删除行业分类',
	 *     'parent' => 'index',
	 *     'display'=> false,
	 *     'hasView'=> false,
	 *     'order'  => 10000,
	 *     'icon'   => '',
	 *     'remark' => '删除行业分类',
	 *     'param'  => ''
	 * )
	 */
	public function delete() {
		$businessCategoryModel = new BusinessCategoryModel();
		$id = $this->request->param('id');
		//获取删除的内容
		$findCategory = $businessCategoryModel->where('id', $id)->find();

		if (empty($findCategory)) {
			$this->error('行业分类不存在!');
		}

		$categoryChildrenCount = $businessCategoryModel->where('parent_id', $id)->count();

		if ($categoryChildrenCount > 0) {
			$this->error('此行业分类有子类无法删除!');
		}

		$categoryPostCount = Db::name('business_category_card')->where('category_id', $id)->count();

		if ($categoryPostCount > 0) {
			$this->error('此行业分类有行业无法删除!');
		}

		$data = [
			'object_id' => $findCategory['id'],
			'create_time' => time(),
			'table_name' => 'business_category',
			'name' => $findCategory['name'],
		];
		$result = $businessCategoryModel
			->where('id', $id)
			->update(['delete_time' => time()]);
		if ($result) {
			Db::name('recycleBin')->insert($data);
			$this->success('删除成功!');
		} else {
			$this->error('删除失败');
		}
	}
}
